import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import legacy from '@vitejs/plugin-legacy' // 导入浏览器版本兼容插件
import viteCompression from 'vite-plugin-compression' // 使用 gzip 或 brotli 压缩资源
import eslintPlugin from 'vite-plugin-eslint' // 导入eslint插件
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' // 导入生成svg插件
// 引入 element-plus 自动导入插件
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// eslint-disable-next-line @typescript-eslint/no-var-requires
const path = require('path')

// https://cn.vitejs.dev/config/
export default defineConfig({
  base: './',
  // 配置开发服务器
  server: {
    host: '0.0.0.0', // 域名
    port: 80, // 端口号
    open: false, // open 在开发服务器启动时自动在浏览器中打开应用程序
    // https: false, // https协议
    // hrm: false, // 禁用或配置 HMR 连接（用于 HMR websocket 必须使用不同的 http 服务器地址的情况）。
    // 反向代理
    proxy: {
      '/api': {
        target: 'http://192.168.0.200:8079', // 代理的请求地址
        secure: false, // false为http访问，true为https访问
        changeOrigin: true, // 是否跨域
        ws: true, // websocket支持
        rewrite: (path) => path.replace(/^\/api/, '') // 路径重写
      }
    }
  },
  // 路径别名（软链接）
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'), // 把 @ 符号映射到 src 文件夹
      src: path.resolve(__dirname, 'src'), // 把 src 映射到 src 文件夹
      views: path.resolve(__dirname, 'src/views'), // 把 views 映射到 src/views 文件夹
      components: path.resolve(__dirname, 'src/components') // 把 components 映射到 src/components 文件夹
    },
    extensions: ['.js', '.jsx', '.json', '.ts', '.tsx', '.vue'] // 使用路径别名时想要省略的后缀名，可以自己 增减
  },
  // 配置css预处理器
  css: {
    postcss: {
      plugins: [
        // 导入css自动添加前缀兼容插件
        require('autoprefixer')
      ]
    },
    preprocessorOptions: {
      scss: {
        // 注册为全局样式可用 页面内不用导入scss
        additionalData: '@import "./src/assets/styles/mixin.scss";'
      }
    }
  },
  // 配置插件
  plugins: [
    // 注册 vue
    vue(),
    // gzip 压缩
    viteCompression(),
    // 注册 eslint 插件
    eslintPlugin({
      include: ['src/**/*.vue', 'src/**/*.js', 'src/**/*.jsx', 'src/**/*.ts', 'src/**/*.tsx'],
      exclude: ['./node_modules/**'],
      cache: false
    }),
    // 浏览器兼容插件
    legacy({
      targets: ['defaults', 'not IE 11']
    }),
    // 注册 svg
    createSvgIconsPlugin({
      // 指定需要缓存的图标文件夹
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')],
      // 指定symbolId格式
      symbolId: 'svg-[name]'
    }),
    // 注册 element-plus 组件自动导入插件
    AutoImport({
      resolvers: [ElementPlusResolver()]
    }),
    Components({
      resolvers: [ElementPlusResolver()]
    })
  ],
  // 配置打包
  build: {
    // outDir: 'dist',
    // assetsDir: 'assets', // 指定静态资源存放路径
    sourcemap: false, // 是否构建source map 文件
    terserOptions: {
      // 生产环境移除console
      compress: {
        drop_console: true,
        drop_debugger: true
      }
    }
  }
})
